package cn.zhpdmmz.mapper;

import cn.zhpdmmz.entity.CheckInformation;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * (CheckInformation)表数据库访问层
 *
 * @author CJW
 * @since 2022-04-04 13:53:31
 */
 @Mapper
 @Repository
public interface CheckInformationMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param checkInformationId 主键
     * @return 实例对象
     */
    CheckInformation queryById(Integer checkInformationId);

    /**
     * 查询指定行数据(含筛选条件)
     *
     * @param checkInformation 查询条件
     * @return 对象列表
     */
    List<CheckInformation> queryAll(CheckInformation checkInformation);

    /**
     * 统计总行数
     *
     * @param checkInformation 查询条件
     * @return 总行数
     */
    long count(CheckInformation checkInformation);

    /**
     * 新增数据
     *
     * @param checkInformation 实例对象
     * @return 影响行数
     */
    int insert(CheckInformation checkInformation);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<CheckInformation> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<CheckInformation> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<CheckInformation> 实例对象列表
     * @return 影响行数
     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
     */
    int insertOrUpdateBatch(@Param("entities") List<CheckInformation> entities);

    /**
     * 修改数据
     *
     * @param checkInformation 实例对象
     * @return 影响行数
     */
    int update(CheckInformation checkInformation);

    /**
     * 通过主键删除数据
     *
     * @param checkInformationId 主键
     * @return 影响行数
     */
    int deleteById(Integer checkInformationId);

    /**
     * 通过订单编号删除订单
     *
     * @param checkInformationNo
     * @return 影响行数
     */
    int deleteByCheckInNo(String checkInformationNo);

    /**
     * 通过订单编号查询订单
     *
     * @param checkInformationNo
     * @return 影响行数
     */
    CheckInformation queryIdByCheckInNo(String checkInformationNo);


    /**
     * 通过房间号查找最新一条数据
     *
     * @param roomNo
     * @return id
     */
    CheckInformation queryNewByRoomNo(String roomNo);

    /**
     * 按顾客类别统计各类别入住人数
     * @param customerType
     * @return
     */
    long countByCustomerType(String customerType);

    /**
     * 按房间类型id统计各类型订房数
     * @param roomTypeId
     * @return
     */
    long countByTypeId(Integer roomTypeId);
}
